package com.fowo.api.sys.rd2;

import net.sf.jsqlparser.statement.select.PlainSelect;

/**
 * 基于 {@link com.fowo.api.sys.rd2.annotation.RoleData2} 的过滤服务接口
 * @author yl_ls
 */
public interface RoleData2FilterService {

    /**
     * 是否支持对指定对象类型应用过滤
     * @param objectType 对象类型（可以是 entity 类或其它由 {@link com.fowo.api.common.annotaion.DataObjectType} 对应到 entity 的类）
     * @return 支持返回 entity 类名，不支持返回 null
     */
    Class<?> supportForObject(Class<?> objectType);

    /**
     * 在此查询段上按需添加 CDAU
     * @param plainSelect 需要应用的查询段
     * @param userId 当前用户
     * @param entityType 实体对象类型
     */
    void applyFilter(PlainSelect plainSelect, Long userId, Class<?> entityType);

    /**
     * 提供权限关联的 INNER JOIN 了句
     * @param objectName 对象名
     * @param userColumn 对应比较用户编号列名
     * @param alias 关联的 CDAU 表别名
     */
    String appendInnerJoin(String objectName, String userColumn, String alias);
}
